import axios from 'axios';
import navMenus from '../pages/Login/menuData';

// 创建用于认证的axios实例
const authAxios = axios.create({
  baseURL: '/api/pc',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
authAxios.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token && config.url !== '/login/check') {
      // 登出等需要认证的请求添加token
      config.headers['Authorization'] = `Bearer ${token}`;
      config.headers['access-token'] = token;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 模拟的游客账号
const guestAccount = {
  username: 'admin',
  password: 'admin',
  token: 'guest-token-12345',
  userinfo: JSON.stringify({
    id: 1,
    name: '游客用户',
    role: 'guest'
  })
};

// 创建菜单数据的深拷贝，避免修改原始对象
const getMenuDataCopy = () => {
  return JSON.parse(JSON.stringify(navMenus));
};

// 登录接口
export const login = async (phone: string, password: string) => {
  // 首先检查是否是游客账号
  if (phone === guestAccount.username && password === guestAccount.password) {
    // 返回游客账号的模拟响应，使用深拷贝的菜单数据
    return {
      code: 0,
      msg: '登录成功',
      data: {
        access_token: guestAccount.token,
        nav: getMenuDataCopy(), // 使用深拷贝
      },
      userinfo: guestAccount.userinfo
    };
  }
  
  // 如果不是游客账号，检查是否有有效的后端服务
  const backendUrl = import.meta.env.VITE_APP_API_URL;
  if (!backendUrl || backendUrl === 'http://localhost:8080/api') {
    // 如果没有配置后端服务或使用默认地址，返回错误
    const error = new Error('用户名或密码错误');
    error.name = 'AuthError';
    throw error;
  }
  
  try {
    // 真实登录请求
    const response = await authAxios.post('/login/check', {
      phone,
      password
    });
    return response.data;
  } catch (error: any) {
    // 如果是网络错误或代理错误，提供更友好的错误信息
    if (error.code === 'ECONNREFUSED' || error.message?.includes('split')) {
      const networkError = new Error('网络连接失败，请检查网络设置或联系管理员');
      networkError.name = 'NetworkError';
      throw networkError;
    }
    
    // 如果是认证错误，返回原始错误
    if (error.response?.status === 401) {
      const authError = new Error('用户名或密码错误');
      authError.name = 'AuthError';
      throw authError;
    }
    
    // 其他错误
    throw error;
  }
};

// 登出接口
export const logout = async () => {
  try {
    // 检查是否是游客账号
    const token = localStorage.getItem('token');
    if (token === guestAccount.token) {
      // 清除本地存储的游客信息
      localStorage.removeItem('token');
      localStorage.removeItem('menuData');
      localStorage.removeItem('userinfo');
      return { code: 0, msg: '登出成功' };
    }
    
    // 真实登出请求
    const response = await authAxios.post('/logout');
    return response.data;
  } catch (error) {
    throw error;
  }
}; 